Zmena stisknute klavesy v komponente

Otázka od: MJsoft

24. 11. 2002 23:55

Ahoj,

  potreboval bych v komponente odchytit stisknutou klavesu a pokud se jedna
o sipku nahoru, tak aby to dale vypadalo jako SHIFT+TAB. Nevite jak toho
docilit. TAB me nedela problemy, delam to takto:


type
  TDBJEdit = class(TDBEdit)
  private
    .
    .
    procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
    .
    .
  end;

procedure TDBJEdit.CNKeyDown(var Message: TWMKeyDown);
begin
  if Message.CharCode=VK_UP then
    Message.CharCode := VK_TAB;

  inherited;
end;


  Jenom nevim jak tam dostat ten SHIFT. Za pripadne odpovedi predem dekuji.


S pozdravem

       Karel
---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.422 / Virová báze: 237 - datum vydání: 20.11.2002

Odpovedá: Pavel ZIDEK

25. 11. 2002 4:26

Taky to jde takhle:

procedure TKDBEdit.KeyDown(var Key: Word; Shift: TShiftState);
var
  FEditTemp : TCustomForm;
begin
   if (Key = VK_DOWN) then
   begin
    FEditTemp := GetParentForm(Self);
    SendMessage(FEditTemp.Handle, WM_NEXTDLGCTL, 0, 0);
    {parametr '0' za WM_NEXTDLGCTL znamená FocusControll na následující}
    Key := 0;
    exit;
   end;

   if (Key = VK_UP) then
   begin
    FEditTemp := GetParentForm(Self);
    SendMessage(FEditTemp.Handle, WM_NEXTDLGCTL, 1, 0);
    {parametr '1' za WM_NEXTDLGCTL znamená FocusControll na předchozí}
    Key := 0;
    exit;
   end;

  inherited KeyDown(Key,Shift);
end;

POZOR na DBCtrlGrid, zde se pohyb pomoci sipek programuje jinak ... myslim
tim pohyb uvnitr DBCtrlGrid a to mzi jednotlivymi DBEdit

Jinak original najdes na http://www.kopr.cz/delphi,
----- Pavel ZIDEK -----


>
> potreboval bych v komponente odchytit stisknutou klavesu a pokud se
jedna
> o sipku nahoru, tak aby to dale vypadalo jako SHIFT+TAB. Nevite jak toho
> docilit. TAB me nedela problemy, delam to takto:
>